var express = require("express");

var app = new express();
var app = express();

//npm install

app.get("/", function(req, res) {
	console.log("初始页面");
})

//获取get传值
////:3000/product?aid = 123
app.get('/product', function(req, res) {
	var query = req.query;
	console.log(qeury);
})

//动态路由配置
app.get('/new/:aid', function(req, res) {
	var aid = req.params.aid;

	res.send("new模块：" + aid);
})


app.post('/dologin', function(req, res) {

})


npm install ejs //安装ejs模板
app.set("View engine", "ejs");	//配置ejs模板

npm install jade
app.set("view engine", "jade"); //配置jade模板


//express默认在views文件夹下寻找模板
//想要改变模板寻找位置
app.set('Views', __dirname + '/views'); 		//__dirname项目路径
app.get('/ejs', function(req, res) {
	var data = {
		list: [111,222,333],
	}
	res.render("index", data);
})

//esj模板中嵌入其他ejs模板
1."views/public/header.ejs" 
2.在需要引入的ejs中加入以下代码
 	<%- include public/header.ejs%>

静态文件托管
app.use(express.static('public')); 				//这样就可以访问public下的静态文件了
app.use('/static', express.static('public')); 	//配置虚拟静态目录： /static的标识会从public目录中去寻找



/*
* 中间件  //第三方中间件cookie
*
*/

//应用级中间件
//next() 路由继续向下匹配
app.use(function(req,res,next) {
	console.log(new Date());

	next();
})

//body-parser 接收get/post提交数据
npm install body-parser --save
var bodyParser = require('body-parser')

//这四个处理方法分别对body的内容采用不同的处理方法；分别是处理json数据、Buffer流数据、文本数据、UTF-8的编码的数据。
bodyParser.json(options)、bodyParser.raw(options)、bodyParser.text(options)、bodyParser.urlencoded(options)
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())

/*
*	中间件的三种使用方式
*	方式一： 全局中间件 拦截所有请求
*/
app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.body, null, 2))
})

/*
*方式二：设置Content-Type 属性；用于修改和设定中间件解析的body类容类型。
*/
// parse various different custom JSON types as JSON
app.use(bodyParser.json({ type: 'application/*+json' });

// parse some custom thing into a Buffer
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }));

// parse an HTML body into a string
app.use(bodyParser.text({ type: 'text/html' }));

/*
*	方式三：这种用法是针对特定路由下的特定请求的，只有请求该路由时，中间件才会拦截和解析该请求；也即这种用法是局部的（最常用的一种方式）
*/
// create application/json parser
var jsonParser = bodyParser.json()
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })
// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
  if (!req.body) return res.sendStatus(400)
  res.send('welcome, ' + req.body.username)
})
// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
  if (!req.body) return res.sendStatus(400)
  // create user in req.body
})